﻿namespace ApiLib.Common.Attributes.IocAttributes;

/// <summary>
/// 组件，作用域Scoped
/// </summary>
[AttributeUsage(AttributeTargets.Class)]
public class ComponentAttribute : Attribute
{
    /// <summary>
    /// 作用域类型
    /// </summary>
    public DependencyType Type { get; set; }

    public ComponentAttribute() : this(DependencyType.Scoped)
    {
    }

    public ComponentAttribute(DependencyType type)
    {
        Type = type;
    }
}

/// <summary>
/// 作用域范围类型
/// </summary>
public enum DependencyType
{
    /// <summary>
    /// 范围：在一个特定的作用域（如一个Web请求）内，只会创建一个对象实例。
    /// </summary>
    Scoped,

    /// <summary>
    /// 单例：应用程序的生命周期内只创建一个对象实例。
    /// </summary>
    Singleton,

    /// <summary>
    /// 瞬态：每次请求时都会创建一个新的对象实例。
    /// </summary>
    Transient
}